package Thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2024/08/24
 * 线程池练习
 */
public class ExecutorsTest {
//    newCachedThreadPool 创建一个可缓存线程池，如果线程池长度超过处理需要，可灵活回收空闲线程，若无可回收，则新建线程。
//    newFixedThreadPool 创建一个定长线程池，可控制线程最大并发数，超出的线程会在队列中等待。
//    newScheduledThreadPool 创建一个定长线程池，支持定时及周期性任务执行。
//    newSingleThreadExecutor 创建一个单线程化的线程池，它只会用唯一的工作线程来执行任务，保证所有任务按照指定顺序执行。


    public static void main(String[] args) {
        /**
         * 新建线程池
         */
        ExecutorService executorService = Executors.newCachedThreadPool();
//        ExecutorService executorService = Executors.newFixedThreadPool(3);
//        ExecutorService executorService = Executors.newSingleThreadExecutor();

        Runnable task = () -> {
            ThreadUtils.sleep(1000);
            System.out.println("--------------------");
        };

        for (int i = 0; i < 20; i++) {
            /**
             * 提交任务给线程池
             */
            executorService.submit(task);
        }

        ThreadUtils.sleep(5000);
    }
}
